package repositories

import (
	"micro-bbs/datamodels"
	"micro-bbs/initialize"
)


/*
	操作bbs_post_like表的接口定义

	作者名称：leixiaotian 创建时间：20211220
*/

type BbsPostLikeInterface interface {
	SelectPage(params map[string]interface{}, page int64, perPage int64) ([]datamodels.BbsPostLike, int, error) //获取分页帖子列表
	Insert(postInfo datamodels.BbsPostLike) (int64, error)                     //插入帖子
}

//返回结构体对象
func NewBbsPostLike() BbsPostLikeInterface {
	return &bbsPostLike{}
}

//bbsPost构体
type bbsPostLike struct {
}


//获取分页帖子列表
func (this *bbsPostLike) SelectPage(params map[string]interface{}, page int64, perPage int64) ([]datamodels.BbsPostLike, int, error) {

	var (
		info    datamodels.BbsPostLike
		records []datamodels.BbsPostLike
		total   = 0
	)

	db := initialize.MsqlDb.Model(&info)

	if params != nil {
		db = db.Where(params)
	}

	//总数
	db.Order("id DESC").Count(&total)

	if page > 0 && perPage > 0 {
		db = db.Limit(perPage).Offset((page - 1) * perPage)
	}

	err := db.Order("id DESC").Find(&records).Error
	if err != nil {
		initialize.IrisLog.Errorf("[帖子收藏仓库-获得帖子分页录列表-失败]-[%s]", err)
		return records, 0, err
	}
	return records, total, nil

}

//插入帖子
func (this *bbsPostLike) Insert(postInfo datamodels.BbsPostLike) (int64, error) {
	// 事务开启
	tx := initialize.MsqlDb.Begin()
	defer func() {
		if r := recover(); r != nil {
			tx.Rollback()
		}
	}()
	if err := tx.Error; err != nil {
		initialize.IrisLog.Errorf("[插入帖子初始化事务失败-%s]", err.Error())
		return 0, err
	}

	//用户领取失败
	if err := tx.Create(&postInfo).Error; err != nil {
		initialize.IrisLog.Errorf("[插入帖子失败-%s]", err.Error())
		tx.Rollback()
		return 0, err
	}

	return postInfo.Id, tx.Commit().Error
}